# Migrating from `v3` to `v4`

With new major version comes breaking changes. This section will guide you through the process of
migrating from `v3` to `v4`.

## 1. Drop support for Node.js v16

Node.js v16 is no longer supported by the Node.js team.
https://github.com/nodejs/Release/#end-of-life-releases

## 2. Plugin execution order is now more predictable

To allow more code reuse, plugins can automatically add other plugin on which they depend. For this,
they use `addPlugin` method of the `onPluginInit` hook.

```ts
const plugin: Plugin = {
  onPluginInit({ addPlugin }) {
    addPlugin(useAnotherPlugin())
  }
}
```

However, `addPlugin` method behavior was not the one expected by most users. It was adding the
plugin at the end of the plugin list. This means that the added plugin hooks were executed last,
after all other plugins.

In `v4`, the plugin is now added inplace in the plugin list. This means the added plugin hooks are
executed immediately after the plugin that added them. This leads for a more predictable behaviour
from an end user perspective, but can lead to unexpected results if a plugin relyed on the previous
behaviour.

The best mitigation, if the plugin really need to execute some hooks last, is to split the plugin in
2 plugins and clearly state the dependency between them.
